문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 프로그래밍 언어 (문단 편집) == 오해 == 프로그래밍 언어에 관해 널리 퍼진 오해 중 하나는, '프로그래밍 언어만 알면 개발을 할 수 있다' 이다. 이는 완전히 틀린 말은 아니지만, 현실적으로 프로그래밍 언어는 '명령'(A일 경우 B를 하라 등)을 추상화할 뿐이며 초보자가 이러한 작은 명령들을 가지고 고수준의 프로그램을 제작하는 것은 [[바퀴]]를 재발명하는 일이 될 수도 있다. 실용적으로 사용되는 수준의 응용 프로그램(애플리케이션)을 제작하려면 단순히 언어만 배워서 끝이 아니라 적합한 [[프레임워크]], 엔진 등과 여러 작업을 위한 라이브러리들, 넓게는 '자신이 '''무엇을''' 만들어야 하는지'에 대한 도메인 지식과 이를 '''어떻게''' 기술적으로 구현할지에 대한 소프트웨어 엔지니어링 지식이 필요하다. 예를 들어 [[백엔드(프로그래밍)|백엔드]] 구축을 위해서는 각 언어별 [[웹 프레임워크]]가, 2D/3D 게임 개발을 위해서는 [[게임 엔진]]이, SSR 렌더링을 위해서는 템플릿 엔진(Jinja, Pug 등) 또는 관련 서버사이드 언어([[JSP]], [[PHP]] 등)에 대한 지식이, CSR 렌더링을 위해서는 [[웹 프런트엔드 프레임워크]]가, 모바일 개발을 위해서는 [[모바일 운영체제]] 별 API를 사용해야 한다.[* 최근에는 풀스택 프레임워크의 비효율성을 지적하여 아예 마이크로 프레임워크를 중심으로 가르치는 강의 등도 존재한다. 풀스택과 마이크로 모두 일장일단이 있으니 어떤 것을 선택할지에 대해서는 학습자의 뜻에 달렸다.] 따라서 언어의 문법을 배우는 것은 실제 개발 생태계에서는 단지 기초에 불과한 과정이지만, 그만큼 초보자들이 가장 먼저 접하는 부분이며 좌절하기도 쉬운 부분이기에 인터넷에서 [[스크립트 키디#s-4.2|자신이 C언어를 안다고 스스로 해커를 자처하는 등의 오해]]가 흔히 발생하는 것이다. 마찬가지로 언어와 프레임워크를 구분하지 못하는 오해도 종종 발생하는데, 예를 들어 [[유니티 엔진]]의 스크립트를 작성하기 위해 [[C\#]]을 사용하는 것은 맞지만, '''유니티 = C# 이 아니다.''' C#은 당초 [[닷넷 프레임워크]]에서 쓰이기 위해 만들어진 언어이며, 유니티의 C#은 실제로는 Mono위에서 돌아갔었다.[* 물론 이것도 이제는 옛말이 되었다.] 초보자가 기본 문법만 배워도 텍스트 기반은 컴파일러 또는 기반이 되는 프레임워크나 API 위에서 신나게 돌릴 수 있다. 하지만 프로그래밍에 대해 전혀 모르는 친구에게 "내가 프로그램을 만들었는데 한 번 구경해볼래?" 라고 보여주기 위해서는 각 언어에 해당하는 GUI 프로그래밍[* 데스크탑용 UI라이브러리, 모바일 앱, 프런트엔드 뷰, [[OpenGL]]등의 그래픽 라이브러리, Plot*등 시각화 라이브러리 등]을 별도로 익혀야 한다. GUI로 표현이 되지 않은 프로그램은 일반인들로 하여금 '''"프로그래머가 뭔가를 만들었다고 해서 기대하고 봤더니 정작 [[CLI|검은 화면에 흰색 글씨]]만 출력되더라!"''' 인 상황이 될 수밖에 없는데, 이는 반만 맞다고 할 수 있다. 또다른 예로 프론트엔드는 눈에 보이는 가시적인 성과를 내니 진짜로 웹 개발자처럼 보인다. 반면 백엔드는 아무것도 하지 않는 것처럼 보일 수밖에 없다. 하지만 그렇다고 해서 백엔드가 필요없다고 주장하는 개발자는 단 한 명도 없을 것이다. 이처럼 프로그래머와 일반인의 시각차는 매우 크기에 오해를 줄이기 위해서는 서로의 노력을 매우 필요로 한다. 또한 초보자들이 많이 하는 오해 중 하나는 '어떤 프로그래밍 언어 = XX를 하기 위한 언어'로 단정짓는 것이다. 대표적인 오해로 [[JavaScript]]는 당시 웹 페이지에서 돌아가도록 만들어진 것이 맞지만, 2022년 현재는 단지 프런트 뿐만 아니라 백엔드나 머신러닝, 스크립팅, 웹 브라우저 확장 프로그래밍, GUI 개발, 클라우드 엣지 컴퓨팅 등 광범위한 분야에서 사용된다. 물론 실제 언어의 사용자층이나 생태계에 따라 '특정 분야에서 더욱 유리한' 언어가 있는 것도 사실이고 실제로 아예 특수 목적 용도로만 쓰이는 언어([[SQL]], [[R]] 등)가 있기도 하니 주의. 반대 경우로 여러 언어를 대충 배우고서 그것을 자신의 지식으로 착각하는 경우도 존재하는데, 상술했듯이 언어의 문법을 배우는 것은 해당 분야의 가장 기초적인 관문이다. 즉, 해당 언어 생태계에 익숙하지 못하다면 '자신이 생각하는 속도 그대로' 코드를 짤 수 없으며, 냄새나는 코드를 찾아낼 능력도 떨어지고, 그런 코드를 리팩토링할 수 있는 능력은 더더욱 떨어지며, 심지어는 남의 코드를 거의 읽지 못하거나 더욱 심하게는 자신이 쓴 코드도 읽어내지 못한다.[* 쉽게 비유해 '[[봉주르]]'를 말할 줄 안다고 프랑스인과 자연스럽게 수다를 떨 수는 없는 것과 마찬가지이다. 언어의 문법과 함께 어휘, 청해, 숙어 그리고 '''실제 연습'''이 뒷받침되지 않는다면 실제 언어를 구사하기까지는 많은 시간이 걸린다.] 비슷한 경우로 한 언어(주로 [[C++]])에 대한 책(또는 강의)을 모두 읽었다고 언어를 모두 익혔다고 착각하는 경우가 있다. 예를 들어 XX 언어에 대한 책을 며칠만에 떼겠다고 계획을 세우는 경우가 있다. 다른 분야와는 다르게 프로그래밍 관련 서적은 하나의 책을 사전(reference)처럼 쓰는 것이 좋으며[* 온라인 문서도 마찬가지다. 프로그래밍은 언어, 프레임워크, CLI 툴 등 종류를 막론하고 늘 방대한 분량의 매뉴얼이 필요하다.], 따라서 한 책을 (부분적으로) 10번 넘게 읽게 되는 경우도 흔하다. 이는 비단 책에만 한정되는 것이 아니며, [[부트캠프]] 광고에서 흔히 볼 수 있는 'X 언어 100시간 완성' 따위의 캐치프레이즈는 실제론 말도 안 된다는 것을 알 수 있다. 단적으로 외국인을 대상으로 하는 한국어 강의에 '한국어 100시간 완성' 같은 제목을 쓴다면 코웃음밖에 더 나오겠는가? 결국 자신이 수십가지 언어를 모두 잘 안다고 말하는 사람은 자신의 신뢰를 스스로 떨어뜨리는 셈이 되며, 실제로도 각 언어를 입문자만도 못하는 경우가 비일비재하다. 여러 언어를(=폴리글롯) 능숙하게 사용하는 것은 분명 효율적이지만, 만약 실제로 여러 언어를 배우고 싶다면 2,3개 정도만 골라서 집중적으로 배우고 연습하는 것이 미래에 더욱 도움이 된다. 프로그래밍 언어마다 공통되는 개념이 존재하는 경우가 상당히 많지만, 그렇지 않은 경우 또한 존재한다. 대표적으로 파이썬 학습자들이 반드시 짚고 넘어가는 '일급 함수'[* 함수형 언어들의 [[람다식|람다]]와 비슷하면서도 미묘하게 다른 개념이다. 정확히는 람다는 이름을 가지고 있지 않는, 표현식(expression)으로 생성되는 함수이며 일급 함수는 기본 값(primitive types)과 똑같이 변수에 저장하거나 함수의 인자로 넘길 수 있음을 의미한다(C에서는 콜백 패턴을 쓰려면 함수 포인터를 사용해야 하는 점과 대비된다). 고차 함수에 인자로 '람다인 일급 함수'를 넘길 수 있지만 유명 함수(named function)도 똑같이 전달 가능하기 때문에 완전히 같은 개념은 아니다.] 라는 개념은 다른 수많은 언어들에도 존재하는데, C언어처럼 객체지향이 아닌 언어에서는 그 개념조차 존재하지 않는 경우도 있다. 그렇다고 해서 C언어나 포인터 문법을 두고 이 세상에 필요없는 언어나 문법이라고 생각하는 사람 또한 없을 것이다. 여러가지 언어를 알고 있다는 건 언어의 차이를 이해하고 강점, 단점을 명확히 파악하는 것에 있어 도움을 준다. 그리고 새로운 언어를 배울 적에도 자신이 이미 알고 있는 개념을 대입하여, 문법만 새로 배우면 나머지 또한 쉽게 배우는 접근성조차 향상시킬 수 있어 도움이 된다. 다만 그것이 절대적인 실력의 척도가 되지 못함 또한 분명하게 알아야 한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기